5.7. Glibc-2.19

El paquete Glibc contiene la librería C principal. Esta librería proporciona todas las rutinas básicas para la ubicación de memoria, búsqueda de directorios, abrir y cerrar archivos , la lectura y escritura de archivos , manejo de cadenas , coincidencia de patrones , aritmética , etc .

Tiempo aproximado de construcción: 4.7 SBU
Espacio requerido en disco: 567 MB

5.7.1. Instalación de Glibc

En algunos casos, particularmente en LFS 7.1 , las cabeceras rpc no se han instalado correctamente. Haz la prueba para ver si están instalados en el sistema host e instalarlas si no lo estuviesen:

if [ ! -r /usr/include/rpc/types.h ]; then
  su -c 'mkdir -pv /usr/include/rpc'
  su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
fi

La documentación de Glibc recomienda construirlo fuera del directorio de fuentes, en un directorio de construcción dedicado

mkdir -v ../glibc-build
cd ../glibc-build

A continuación, prepara Glibc para su compilación:

../glibc-2.19/configure                             \
      --prefix=/tools                               \
      --host=$LFS_TGT                               \
      --build=$(../glibc-2.19/scripts/config.guess) \
      --disable-profile                             \
      --enable-kernel=2.6.32                        \
      --with-headers=/tools/include                 \
      libc_cv_forced_unwind=yes                     \
      libc_cv_ctors_header=yes                      \
      libc_cv_c_cleanup=yes

El significado de las opciones de configure:

--host=$LFS_TGT, --build=$(../glibc-2.19/scripts/config.guess)

El efecto combinado de estas opciones es que el sistema de construcción de Glibc se configura para compilación cruzada , utilizando el enlazador cruzado y compilador cruzado en /tools .

--disable-profile

Esto construye las librerías sin información de perfiles . Omite esta opción si planeas usar perfiles en las herramientas temporales.

--enable-kernel=2.6.32

Esto le indica a Glibc que compile la librería con soporte para 6.2.32 y posteriores núcleos de Linux . Soluciones provisionales para los núcleos antiguos no están habilitadas.

--with-headers=/tools/include

Esto le indica a Glibc que se compile contra las cabeceras recién instaladas en el directorio de herramientas , para que conozca exactamente las características del núcleo y pueda optimizarse correctamente .

libc_cv_forced_unwind=yes

El enlazador instalado durante Sección 5.4, " Binutils - 2.24 - Fase 1 ", fue compilado cruzadamente y , como tal, no se puede utilizar hasta que Glibc se ha instalado. Esto significa que la prueba de configuración para force-unwind support va a fracasar, ya que depende de un enlazador de trabajo . El libc_cv_forced_unwind = yes hace que la variable se pase con el fin de informar a configure que force-unwind support está disponible sin que tener que ejecutar la prueba.

libc_cv_c_cleanup=yes

De forma similar, pasamos libc_cv_c_cleanup = yes a través del script de configuración para que se salta la prueba y se configure C de forma limpia.

libc_cv_ctors_header=yes

Igualmente, pasamos libc_cv_ctors_header = yes a través del script de configuración para que se salte la prueba y se configure el soporte constructor de gcc.

Durante esta etapa, la siguiente advertencia puede aparecer:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

La ausencia o incompatibilidad del programa msgfmt es generalmente inofensiva. Este programa msgfmt es parte del paquete Gettext que el sistema anfitrión debe proporcionar.

Compila el paquete:

make

Este paquete incluye un banco de prueba, sin embargo , no se puede ejecutar en este momento porque no tenemos un compilador C + + todavía.

[Note]

Nota

El conjunto de pruebas también requiere datos de localización para ser instalado con el fin de ejecutarse con éxito. Los Datos Locales proporcionan información al sistema en cuanto a cosas tales como la fecha , la hora y los formatos de salida actualmenre aceptados por las utilidades del sistema . Si los bancos de pruebas no se ejecutan en este capítulo (según la recomendación ) , no hay necesidad de instalar ahora las locales . Los lugares apropiados se instalarán en el próximo capítulo . Para instalar las locales de Glibc de todos modos, siga las instrucciones de uso de la Sección 6.9, " Glibc- 2.19 ".

Instala el paquete:

make install
[Caution]

ATENCIÓN

En este punto , es obligatorio parar y asegurarse de que las operaciones básicas (compilación y enlazado) de las nuevas herramientas funcionan como se esperaba. Para llevar a cabo una comprobación de validez , ejecute los siguientes comandos :

echo 'main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ': /tools'

Si todo funciona correctamente, no debe haber errores y la salida del último comando debe ser de la forma:

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

Tenga en cuenta que /tools/lib, o /tools/lib64 para equipos de 64 bits aparece como el prefijo de tu enlazador dinámico.

Si la salida no se muestra como arriba, o no hay salida alguna , algo está mal. Investiga y sigue los pasos para averiguar dónde está el problema y corregirlo. Este problema se debe resolver antes de continuar .

Una vez que todo esté bien, borra los ficheros de prueba:

rm -v dummy.c a.out
[Note]

Nota

La construciión de Binutils de la sección después de la próxima servirán como una comprobación adicional de que las herramientas se han construido correctamente. Si Binutils no construye , es una indicación de que algo ha ido mal con el anterior Binutils , GCC, o instalaciones de glibc.

Los detalles sobre este paquete se encuentran en la Sección 6.9.4 , "Contenido de Glibc ".